package git.soulbgm.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;

/**
 * 消费者的配置
 *
 * @author SoulBGM
 * @date 2021/07/12
 */
@Configuration
public class ConsumerConfig {

    /**
     * 消息侦听器适配器
     *
     * @param messageListener 消息侦听器
     * @return {@link MessageListenerAdapter}
     */
    @Bean
    public MessageListenerAdapter messageListenerAdapter(MessageListener messageListener) {
        return new MessageListenerAdapter(messageListener);
        // 当没有继承MessageListener时需要写方法名字
       //return new MessageListenerAdapter(messageListener, "handleMessage");
    }

    /**
     * 创建消息监听容器
     *
     * @param redisConnectionFactory 连接工厂
     * @param messageListenerAdapter 消息侦听器适配器
     * @return {@link RedisMessageListenerContainer}
     */
    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory, MessageListenerAdapter messageListenerAdapter) {
        RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
        redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
        redisMessageListenerContainer.addMessageListener(messageListenerAdapter, new PatternTopic("message:*"));
        return redisMessageListenerContainer;
    }

}
